Page({
  data: {
    // 房屋信息
    houseInfo:'',
    // 维修项目名称
    repairItemName: '',
    // 维修日期
    appointment: '',
    currentDate: new Date().getTime(),
    houseLayerVisible: false,
    repairLayerVisible: false,
    dateLayerVisible: false,
    houseList: [],
    repairItem: [],
    attachment: [],
    houseId:'' ,// 已审核通过的房屋id
    repairItemId:'',// 维修项目id
    description:''// 问题描述-最多200字
  },
  onLoad({id}){
     // 获取房屋列表
     this.getHouseList()
      // 获取维修项目
    this.getRepairItem()
    if (id) {
      wx.setNavigationBarTitle({
        title: '修改报修信息',
      })
      this.getRepairDetail(id)
    }
  },
 async getRepairDetail(id){
   if(!id)return
  // 请求数据接口
  const{code,data:repairDetail}=await wx.http.get('/repair/' + id)
  // 校验接口调用结果
  if (code !== 10000) return wx.utils.toast('获取报修详情失败!')
  this.setData({
    ...repairDetail
  })
 },
  async getHouseList() {
    // 请求数据接口
    const { code, data: houseList } = await wx.http.get('/house')
    // 检测接口返回的结果
    if (code !== 10000) return wx.utils.toast('获取房屋列表失败!')
    // 数据渲染
    this.setData({ houseList })
  },
  async getRepairItem() {
    // 请求数据接口
    const { code, data: repairItem } = await wx.http.get('/repairItem')
    // 检测接口返回的数据
    if (code !== 10000) return wx.utils.toast('获取维修项目失败!')
    // 数据渲染
    this.setData({ repairItem })
  },
   // 4. 选择报修房屋的信息
  selectHouse(ev){
    // 获取用户选择房屋的名称
    const{name:houseInfo,id:houseId}=ev.detail
    // 页面中渲染
    this.setData({
      houseInfo,
      houseId
    })
  },
   // 5. 选择维修项目
  selectRepairItem(ev) {
    // 获取用户选择的维修项目名称
    const { name: repairItemName,id:repairItemId} = ev.detail
    // 页面中渲染
    this.setData({ 
      repairItemName,
      repairItemId
    })
  },
  // 6. 选择维修日期
  selectDate(ev) {
    // console.log(ev.detail)
    this.setData({
      dateLayerVisible: false,
      appointment: wx.utils.formatDate(ev.detail),
    })
  },
  // 4. 选择图片文件并上传
  async onAfterRead(e) {
    const res = await wx.http.upload('/upload', {
      name: 'file',
      filePath: e.detail.file.tempFilePath,
      formData: {},
    })
    if (res.code !== 10000) return wx.utils.toast('上传图片失败')
    // 2.2 更新数据
    const { attachment } = this.data
    attachment.push(res.data)
    this.setData({
      attachment,
    })
  },
    // 5. 删除图片
    onDelete(e) {
      // const { attachment } = this.data
      // attachment.splice(e.detail.index, 1)
  
      this.data.attachment.splice(e.detail.index, 1)
      this.setData({
        attachment: this.data.attachment,
      })
    },

  openHouseLayer() {
    this.setData({ houseLayerVisible: true })
  },
  closeHouseLayer() {
    this.setData({ houseLayerVisible: false })
  },
  openRepairLayer() {
    this.setData({ repairLayerVisible: true })
  },
  closeRepairLayer() {
    this.setData({
      repairLayerVisible: false,
    })
  },

  openDateLayer() {
    this.setData({ dateLayerVisible: true })
  },
  closeDateLayer() {
    this.setData({ dateLayerVisible: false })
  },
  goList() {
    wx.reLaunch({
      url: '/repair_pkg/pages/list/index',
    })
  },
  verifyHouse() {
    const valid = this.data.houseId !== ''
    // 验证结果提示
    if (!valid) wx.utils.toast('请选择房屋信息!')
    // 返回验证结果
    return valid
  },
  verifyRepair() {
    const valid = this.data.repairItemId !== ''
    // 验证结果提示
    if (!valid) wx.utils.toast('请选择维修项目!')
    // 返回验证结果
    return valid
  },
  verifyMobile() {
    // 验证手机号
    const reg = /^[1][3-8][0-9]{9}$/
    const valid = reg.test(this.data.mobile.trim())
    // 验证结果提示
    if (!valid) wx.utils.toast('请填写正确的手机号码!')
    // 返回验证结果
    return valid
  },
  verifyDate() {
    // 验证日期格式
    const reg = /^\d{4}\/\d{2}\/\d{2}$/
    const valid = reg.test(this.data.appointment)
    // 验证结果提示
    if (!valid) wx.utils.toast('请选择预约日期!')
    // 返回验证结果
    return valid
  },
  verifyDescription() {
    // 验证报修项目描述
    const valid = this.data.description.trim() !== ''
    // 验证结果提示
    if (!valid) wx.utils.toast('请填写问题描述!')
    // 返回验证结果
    return valid
  },
  async submitForm(){
    // 逐个验证表单数据
    if(!this.verifyHouse()) return
    if(!this.verifyRepair())return
    if(!this.verifyMobile())return
    if(!this.verifyDate())return
    if(!this.verifyDescription())return
    // 解构获取接口需要的参数
    const {houseId,repairItemId,appointment,mobile,description,attachment,id}=this.data
    // 请求数据接口
    const {code} =await wx.http.post('/repair',{
      houseId,
      repairItemId,
      appointment,
      mobile,
      description,
      attachment,
      id
    })
    // 检测接口请求的结果
    if(code !==10000)return wx.showToast({
      title: '在线报修失败!',
      icon: 'none'
    })
    // 跳转到表单列表页面
    wx.redirectTo({
      url: '/repair_pkg/pages/list/index',
    })

  }
})
